import java.util.ArrayList;
import java.util.List;


public class Nodo implements Comparable<Nodo>{
	private Posicion pos;
	/* 
	 * Sin pieza = 0
	 * Avanzar una posicion = 1
	 * Avanzar dos posiciones = 2
	 * Girar Izquierda = 3
	 * Girar Derecha = 4
	 */
	private int pieza;
	private double coste, f;
	private long profundidad;
	private Nodo padre;
	private int piezasProbadas;
	
	private int direccion;	/* 1 = horizontal, -1 = vertical */
	private List<Posicion> visitados;
	
	public Nodo() {	super(); }

	public Nodo(Posicion pos, int pieza, double coste, double f, long profundidad, Nodo padre) {
		super();
		this.pieza=pieza;
		this.pos = pos;
		this.coste = coste;
		this.f = f;
		this.profundidad = profundidad;
		this.padre = padre;
		this.piezasProbadas = 1;
		if (padre!=null)
			this.visitados=padre.getVisitados();
		else
			this.visitados= new ArrayList<Posicion>();
	}
	
	public List<Posicion> getVisitados() {
		return visitados;
	}

	public void setVisitados(List<Posicion> visitados) {
		this.visitados = visitados;
	}


	public int getDireccion() {
		return direccion;
	}

	public void setDireccion(int direccion) {
		this.direccion = direccion;
	}

	public int getPiezasProbadas() {
		return piezasProbadas;
	}

	public void setPiezasProbadas(int piezasProbadas) {
		this.piezasProbadas = piezasProbadas;
	}

	public int getPieza() {
		return pieza;
	}

	public void setPieza(int pieza) {
		this.pieza = pieza;
	}

	public Posicion getPos() {
		return pos;
	}

	public double getCoste() {
		return coste;
	}

	public double getF() {
		return f;
	}

	public long getProfundidad() {
		return profundidad;
	}

	public Nodo getPadre() {
		return padre;
	}

	public void setPos(Posicion pos) {
		this.pos = pos;
	}

	public void setCoste(double coste) {
		this.coste = coste;
	}

	public void setF(double f) {
		this.f = f;
	}

	public void setProfundidad(long profundidad) {
		this.profundidad = profundidad;
	}

	public void setPadre(Nodo padre) {
		this.padre = padre;
	}
	
	public int compareTo(Nodo n){
		Double comp = this.getF()-n.getF();
		return comp.intValue();
	}
	
	public boolean equals(Nodo n){
		boolean igual=false;
		if (getPos().getX()==n.getPos().getX() && getPos().getY()==n.getPos().getY())
			igual=true;
		return igual;
	}
}
